home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / tcppack / tcppackb.lzh / src / samples / finger.c < prev    next >
C/C++ Source or Header  |  1994-08-03  |  2KB  |  93 lines

  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. #include"network.h"
  5. #include"socket.h"
  6.  
  7. static void finger (char *, char *);
  8.  
  9. void
  10. main (int argc, char **argv)
  11. {
  12.   int i;
  13.  
  14.   for (i = 1; i < argc; i++)
  15.     {
  16.       char *user, *target;
  17.  
  18.       target = strchr (argv[i], '@');
  19.       if (target)
  20.     {
  21.       user = argv[i];
  22.       *target++ = '\0';
  23.       finger (target, user);
  24.     }
  25.     }
  26.   return;
  27. }
  28.  
  29. static void
  30. finger (char *target, char *user)
  31. {
  32.   long ipaddr;
  33.   struct hostent *h;
  34.   char buff[256];
  35.   int sock, len, port;
  36.   struct sockaddr_in fsocket;
  37.   struct servent *s;
  38.  
  39.   s = getservbyname ("finger", "tcp");
  40.   if (!s)
  41.     {
  42.       fprintf (stderr, "finger: No finger service on this host\n");
  43.       return;
  44.     }
  45.   port = s->s_port;
  46.  
  47.   h = gethostbyname (target);
  48.   if (!h)
  49.     {
  50.       fprintf (stderr, "Host name look up failure: %s\n", target);
  51.       return;
  52.     }
  53.  
  54.   ipaddr = *(long*)h->h_addr;
  55.   fsocket.sin_family = AF_INET;
  56.   fsocket.sin_port = port;
  57.   fsocket.sin_addr.s_addr = ipaddr;
  58.  
  59.   sock = socket (AF_INET, SOCK_STREAM, 0);
  60.   if (sock == -1)
  61.     {
  62.       fprintf (stderr, "Can't create socket\n");
  63.       return;
  64.     }
  65.  
  66.   if (connect (sock, (char *)&fsocket, sizeof (struct sockaddr_in)) == -1)
  67.     {
  68.       fprintf (stderr, "Unable to connect: %s\r\n", sockerr (sock));
  69.       return;
  70.     }
  71.  
  72.   write_s (sock, user, strlen (user));
  73.   write_s (sock, "\r\n", 2);
  74.  
  75.   for (;;)
  76.     {
  77.       len = socklen (sock, 0);
  78.       if (len < 0)
  79.     break;
  80.  
  81.       if (len)
  82.     {
  83.       len = read_s (sock, buff, len < sizeof (buff) ? len : sizeof (buff));
  84.       if (len > 0)
  85.         {
  86.           buff[len] = '\0';
  87.           write (fileno (stdout), buff, len);
  88.         }
  89.     }
  90.     }
  91.   close_s (sock);
  92. }
  93.